package cn.org.mrliu.ssm.qq;

import java.util.List;

/**
 * QQ消息工具类,对外提供访问接口,外部通过调用该类的方法发送QQ消息
 * 
 * @author MrLiu
 *
 */
public class QQMessageUtil {
	private QQMessageUtil() {
	}

	/**
	 * 给指定的QQ发送消息
	 * 
	 * @param sender
	 *            发送者信息
	 * @param qq
	 *            QQ号码
	 * @param message
	 *            QQ消息
	 */
	public static void send(String sender, String qq, String message) {
		send(sender, qq, message, null);
	}

	/**
	 * 给指定的QQ发送消息,并处理回调结果
	 * 
	 * @param sender
	 *            发送者信息
	 * @param qq
	 *            QQ号码
	 * @param message
	 *            QQ消息
	 * @param qqMessageCallback
	 *            回调处理类
	 */
	public static void send(String sender, String qq, String message, QQMessageCallback qqMessageCallback) {
		_send(sender, qq, message, QQMessageType.SEND_MESSAGE, qqMessageCallback);
	}

	/**
	 * 给多个QQ发送消息
	 * 
	 * @param sender
	 *            发送者信息
	 * @param qqs
	 *            QQ列表
	 * @param message
	 *            QQ消息
	 */
	public static void send(String sender, List<String> qqs, String message) {
		for (String qq : qqs) {
			send(sender, qq, message);
		}
	}

	/**
	 * 给多个QQ发送消息,并处理回调结果
	 * 
	 * @param sender
	 *            发送者信息
	 * @param qqs
	 *            QQ列表
	 * @param message
	 *            QQ消息
	 * @param qqMessageCallback
	 *            回调处理类
	 */
	public static void send(String sender, List<String> qqs, String message, QQMessageCallback qqMessageCallback) {
		for (String qq : qqs) {
			send(sender, qq, message, qqMessageCallback);
		}
	}

	/**
	 * 给指定QQ群发送消息
	 * 
	 * @param sender
	 *            发送者信息
	 * @param qq
	 *            QQ群号码
	 * @param message
	 *            QQ消息
	 */
	public static void sendGroup(String sender, String qq, String message) {
		sendGroup(sender,qq, message, null);
	}

	/**
	 * 给指定QQ群发送消息,并处理回调结果
	 * 
	 * @param sender
	 *            发送者信息
	 * @param qq
	 *            QQ群号码
	 * @param message
	 *            QQ消息
	 * @param qqMessageCallback
	 *            回调处理类
	 */
	public static void sendGroup(String sender, String qq, String message, QQMessageCallback qqMessageCallback) {
		_send(sender, qq, message, QQMessageType.SEND_CLUSTER_MESSAGE, qqMessageCallback);
	}

	/**
	 * 给多个QQ群发送消息
	 * 
	 * @param sender
	 *            发送者信息
	 * @param qqs
	 *            QQ群号码
	 * @param message
	 *            QQ消息
	 */
	public static void sendGroup(String sender, List<String> qqs, String message) {
		for (String qq : qqs) {
			sendGroup(sender, qq, message);
		}
	}

	/**
	 * 给多个QQ群发送消息,并处理回调结果
	 * 
	 * @param sender
	 *            发送者信息
	 * @param qqs
	 *            QQ群号码
	 * @param message
	 *            QQ消息
	 * @param qqMessageCallback
	 *            回调处理类
	 */
	public static void sendGroup(String sender, List<String> qqs, String message, QQMessageCallback qqMessageCallback) {
		for (String qq : qqs) {
			sendGroup(sender, qq, message, qqMessageCallback);
		}
	}

	/**
	 * 构建QQMessage对象并添加到QQ消息队列中
	 * 
	 * @param sender
	 *            发送者信息
	 * @param qq
	 *            QQ号码
	 * @param message
	 *            QQ消息
	 * @param qqMessageType
	 *            QQ消息类型
	 * @param qqMessageCallback
	 *            QQ回调处理类
	 */
	private static void _send(String sender, String qq, String message, String qqMessageType,
			QQMessageCallback qqMessageCallback) {
		// 创建QQ消息
		QQMessage qqMessage = new QQMessage();
		// 设置发送者
		qqMessage.setSender(sender);
		// 设置QQ号码
		qqMessage.setQq(qq);
		// 设置QQ消息
		qqMessage.setMessage(message);
		// 设置QQ回调接口
		qqMessage.setQqMessageCallback(qqMessageCallback);
		// 设置QQ消息类型
		qqMessage.setType(qqMessageType);
		// 发送消息
		qqMessage.send();
	}

}
